export class DateTimeUtil {
    /**
     * 按照秒数增加时间
     * @param date 原始日期
     * @param seconds 增加的秒数
     * @returns 增加后的日期
     */
    public static addSeconds(date: Date, seconds: number): Date {
        const result = new Date(date); // 创建新的 Date 对象以避免修改原始日期
        result.setSeconds(result.getSeconds() + seconds);
        return result;
    }


    // 静态方法，用于格式化日期
    public static formatDate(date: Date, format = "YYYY-MM-DD HH:mm:ss"): string {
        const year = date.getFullYear();
        const month = this.padStart(String(date.getMonth() + 1), 2, '0');
        const day = this.padStart(String(date.getDate()), 2, '0');
        const hours = this.padStart(String(date.getHours()), 2, '0');
        const minutes = this.padStart(String(date.getMinutes()), 2, '0');
        const seconds = this.padStart(String(date.getSeconds()), 2, '0');

        // 替换格式字符串中的占位符
        return format
            .replace('YYYY', year.toString())
            .replace('MM', month)
            .replace('DD', day)
            .replace('HH', hours)
            .replace('mm', minutes)
            .replace('ss', seconds);
    }

    /**
     * 将 'YYYY-MM-DD HH:MM:SS' 格式的日期字符串转换为 Date 对象
     * @param dateStr 日期字符串，格式为 'YYYY-MM-DD HH:MM:SS'
     * @returns 转换后的 Date 对象，如果输入格式不正确则返回 null
     */
    public static parseDate(dateStr: string): Date | null {
        const regex = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;
        if (!regex.test(dateStr)) {
            console.error('输入的日期字符串格式不正确，应为 YYYY-MM-DD HH:MM:SS');
            return null;
        }

        const [datePart, timePart] = dateStr.split(' ');
        const [year, month, day] = datePart.split('-').map(Number);
        const [hours, minutes, seconds] = timePart.split(':').map(Number);

        // 月份从 0 开始，所以要减 1
        return new Date(year, month - 1, day, hours, minutes, seconds);
    }

    // 手动实现 padStart 功能
    public static padStart(str: string, targetLength: number, padString: string): string {
        while (str.length < targetLength) {
            str = padString + str;
        }
        return str;
    }
}